<?php

/**
 * Manipulacion de los datos de la tabla de
 */
class IndexController extends Zend_Controller_Action {

    /**
     * Obtiene todos los datos desde el modelo.
     */
    public function indexAction() {
    

        //Instancio el modelo de datos
        $model = new Application_Model_Post();

        //Obtengo todos los datos de la DB
        $posts = $model->getAll();

        //Creo un paginador
        
        Zend_View_Helper_PaginationControl::setDefaultViewPartial('/paginator/items.phtml');
        
        $paginator = Zend_Paginator::factory($posts);
    
        if ($this->_hasParam('page')) {
            $paginator->setCurrentPageNumber($this->_getParam('page'));
        }

        $this->view->paginator = $paginator;
    }

    /**
     * Crea un formulario nuevo y lo envia a la vista para mostrarlo.
     * Luego por medio de POST los guarda en la base de datos por la funcion save() del model
     * 
     */
    public function agregarAction() {

        //se instancia el form
        $form = new Application_Form_Post();

        //Si es por medio de post entra aca
        if ($this->getRequest()->isPost()) {

            //valida si esta todo OK!
            if ($form->isValid($this->_getAllParams())) {

                //se crea una instancia del modelo
                $model = new Application_Model_Post();

                // se guarda el modelo para ser enviad a la db                
                $model->save($form->getValues());


                //redirige al link
                return $this->_redirect('/index');
            }
        }

        //lo envia a la lista
        $this->view->form = $form;
    }

    /**
     * Actualiza datos en la DB
     * 
     * @return type devuelve un formulario con los datos encontrados en la DB 
     * o redirecciona a listar nuevamente
     */
    public function updateAction() {

        //_hasParam revisa si se envio por request algun parametro.
        if (!$this->_hasParam('id')) {
            //si el parametro id viene vacio redirige nuevamente a listar
            return $this->_redirect('/index');
        }

        //instancia el form
        $form = new Application_Form_Post();

        //instancia del modelo
        $posts = new Application_Model_Post();

        //Si es por medio de post entra aca
        if ($this->getRequest()->isPost()) {

            //valida si esta todo OK!
            if ($form->isValid($this->_getAllParams())) {

                //se crea una instancia del modelo
                $model = new Application_Model_Post();

                //actualiza los datos del row
                $model->save($form->getValues(), $this->_getParam('id'));


                //redirige al link
                return $this->_redirect('/index');
            }
        } else {
            //genera una columna para llenar el form
            $row = $posts->getRow($this->_getParam('id'));
            if ($row) {
                //con populate se recorre el row y se llena el form.
                $form->populate($row->toArray());
            }
        }

        //lo envia a la lista
        $this->view->form = $form;
    }

    public function deleteAction() {

        //_hasParam revisa si se envio por request algun parametro.
        if (!$this->_hasParam('id')) {
            //si el parametro id viene vacio redirige nuevamente a listar
            return $this->_redirect('/index');
        }

        $model = new Application_Model_Post();

        //obtengo la columba desde el model
        $row = $model->getRow($this->_getParam('id'));

        //si row existe borro
        if ($row) {
            $row->delete();
            //otra forma de hacer esto
            //$model->delete($model->getAdapter()->quoteInto('id=?', $this->_getParam()));
        }

        //redirijo
        return $this->_redirect('/index');
    }
    
    public function verAction(){
        if (!$this->_hasParam('id')) {
            return $this->_redirect('/');
        }

        $posts = new Application_Model_Post();
        $post = $posts->getRow($this->_getParam('id'));

        if (!$post) {
            return $this->_redirect('/');
        }

        $this->view->post = $post;
    }

}